Merhaba, Cargo!
Cargo, Rust'ın yapılandırma sistemi ve paket yöneticisidir. Çoğu Rustacean bu aracı, Rust projelerini yönetmek için kullanır çünkü Cargo kodunuzu derler, kodunuzun bağlı olduğu kütüphaneleri indirir ve bu kütüphaneleri derler. (Kodunuzun ihtiyaç duyduğu kütüphanelere bağımlılıklar diyoruz.)
Bu kitap, Rust projelerinin büyük bir çoğunluğunun Cargo'yu kullandığı varsayımıyla ilerlemektedir. Eğer resmi yolla Rust'ı kurduysanız, Cargo da yüklenmiş olacaktır. Eğer Cargo'nun yüklenip yüklenmediğini kontrol etmek istiyorsanız, terminalinizde cargo --version
komutunu çalıştırabilirsiniz. Eğer bir sürüm numarası görüyorsanız, Cargo yüklenmiştir!
Cargo ile Proje Oluşturma
Cargo kullanarak yeni bir proje oluşturalım ve orijinal "Merhaba, dünya!" projemizle arasındaki farklara bakalım. Projeler dizinine geri gidin ve ardından:
$ cargo new hello_cargo
$ cd hello_cargo
Bu komutlar, hello_cargo
adında yeni bir dizin ve proje oluşturur.
Git, yaygın bir sürüm kontrol sistemidir. Eğer cargo new
komutunu mevcut bir Git deposunun içinde çalıştırırsanız, Git dosyaları oluşturulmaz. Bu davranışı cargo new --vcs=git
komutu ile geçersiz kılabilirsiniz.
Cargo.toml
Metin düzenleyicinizde Cargo.toml
dosyasını açın. İçerik şu şekilde görünecektir:
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"
# Daha fazla anahtar ve tanımlarını https://doc.rust-lang.org/cargo/reference/manifest.html adresinde görebilirsiniz
[dependencies]
Bu dosya, TOML (Tom's Obvious, Minimal Language) formatındadır, yani Cargo'nun yapılandırma formatıdır.
src/main.rs
Şimdi src/main.rs
dosyasını açın:
fn main() {
println!("Hello, world!");
}
Cargo, tıpkı bizim yazdığımız gibi bir "Merhaba, dünya!" programı oluşturmuştur! Şimdiye kadar, aralarındaki tek fark, Cargo'nun kodu src
dizinine yerleştirmiş olması ve ana dizinde bir Cargo.toml
yapılandırma dosyasına sahip olmamızdır.
Cargo, kaynak dosyalarınızın src
dizini içinde olmasını bekler. Üst düzey projenizde README dosyaları, lisans bilgileri, yapılandırma dosyaları ve kodunuzla ilgili olmayan diğer şeyleri tutabilirsiniz.
Eğer Cargo kullanmayan bir proje başlattıysanız, bu projeyi Cargo'yu kullanan bir projeye dönüştürebilirsiniz. Projedeki kodu src
dizinine taşıyın ve uygun bir Cargo.toml
dosyası oluşturun.
Tabii ki, aşağıda belgenin Türkçe çevirisi bulunmaktadır. Markdown formatı ve Docusaurus'un admonitions
özellikleri de kullanılmıştır.
Cargo Projesini Oluşturma ve Çalıştırma
Şimdi "Merhaba, dünya!" programını Cargo ile nasıl oluşturup çalıştırabileceğimizi görelim! hello_cargo
dizinindeyken, aşağıdaki komutu girerek projenizi oluşturun:
$ cargo build
Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 2.85 secs
Bu komut, mevcut dizininiz yerine target/debug/hello_cargo
(veya Windows'da target\debug\hello_cargo.exe
) adlı bir yürütülebilir dosya oluşturur. Varsayılan derleme bir hata ayıklama derlemesi olduğu için, Cargo bu ikiliyi bir debug
adlı dizine yerleştirir. Yürütülebilir dosyayı şu komutla çalıştırabilirsiniz:
$ ./target/debug/hello_cargo # veya Windows'ta .\target\debug\hello_cargo.exe
Hello, world!
Her şey yolunda giderse, "Hello, world!" terminalde görüntülenmelidir. İlk kez cargo build
çalıştırdığınızda, Cargo en üst düzeyde yeni bir Cargo.lock
dosyası da oluşturur. Bu dosya, projenizdeki bağımlılıkların tam sürümünü takip eder. Cargo, bu dosyanın içeriğini sizin için yönetir; manuel olarak değiştirmenize gerek yoktur.
cargo build
ile bir proje oluşturduk ve ./target/debug/hello_cargo
ile çalıştırdık ama aynı komutta kodu derlemek ve sonuçta oluşan yürütülebiliri çalıştırmak için cargo run
kullanabiliriz:
$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
Running `target/debug/hello_cargo`
Hello, world!
cargo run
kullanmak, cargo build
çalıştırmayı ve sonra ikiliye olan tüm yolu kullanmayı hatırlamaktan daha uygundur, bu yüzden çoğu geliştirici cargo run
kullanır.
Ayrıca, cargo check
adlı bir komut da sağlar. Bu komut, kodunuzun derlenip derlenmediğini hızlıca kontrol eder ama bir yürütülebilir dosya üretmez:
$ cargo check
Checking hello_cargo v0.1.0 (file:///projects/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.32 secs
Neden bir yürütülebilir dosya istemezsiniz? Genellikle, cargo check
kodu yazarken sürekli çalışınızı kontrol ediyorsanız işlemleri hızlandırmak için cargo build
'den çok daha hızlıdır. Birçok Rustacean, projelerinin hâlâ derlenip derlenmediğini öğrenmek için cargo check
'i periyodik olarak çalıştırır.
Öğrendiklerimizi Özetleyelim
cargo new
kullanarak bir proje oluşturabiliriz.cargo build
kullanarak bir proje oluşturabiliriz.cargo run
kullanarak bir projeyi tek adımda oluşturabilir ve çalıştırabiliriz.- Hatalar için bir projeyi derlemek ama bir yürütülebilir dosya üretmeksizin kontrol etmek için
cargo check
kullanabiliriz. - Oluşturulan derlemenin sonucu kodumuzla aynı dizinde saklanmaz, Cargo bunu
target/debug
dizinine yerleştirir.
Yayın İçin Oluşturma
Projniz nihayet yayına hazır olduğunda, optimizasyonlarla derlemek için cargo build --release
komutunu kullanabilirsiniz. Bu komut, yürütülebilir bir dosyayı target/release
dizinine, target/debug
yerine oluşturur. Optimizasyonlar Rust kodunuzun daha hızlı çalışmasını sağlar, fakat açık tutulduğunda programınızın derlenme süresini uzatır. İşte bu yüzden iki farklı profil vardır: biri geliştirme için, hızlı ve sık sık yeniden derlemek istediğinizde; diğeri ise kullanıcıya vereceğiniz, tekrar tekrar derlenmeyecek ve olabildiğince hızlı çalışacak olan nihai programı oluşturmak için. Kodunuzun çalışma süresini ölçüyorsanız, cargo build --release
çalıştırdığınızdan ve target/release
içindeki yürütülebilir dosyayla ölçüm yaptığınızdan emin olun.
Eğer kodunuzun çalışma süresini ölçüyorsanız, mutlaka cargo build --release
komutuyla derleme yapın ve target/release
dizinindeki yürütülebilir dosyayı kullanarak ölçüm yapın.
Cargo'nun Konvansiyon Olarak Kullanımı
Basit projelerde, Cargo'nun rustc
kullanmaktan sağladığı çok fazla bir avantajı yoktur, fakat programlarınız daha karmaşık hale geldikçe değerini kanıtlayacaktır. Programlar birden fazla dosyaya sahip olmaya başladığında veya bir bağımlılığa ihtiyaç duyduğunda, derlemeyi Cargo'nun koordine etmesi çok daha kolaydır.
Basit olsa bile hello_cargo
projesi, Rust kariyerinizin geri kalanında kullanacağınız birçok gerçek aracı kullanmaktadır. Aslında, mevcut projeler üzerinde çalışmak için aşağıdaki komutları kullanarak Git ile kodu kontrol edebilir, o projenin dizinine geçebilir ve derleme yapabilirsiniz:
$ git clone example.org/someproject
$ cd someproject
$ cargo build
Cargo hakkında daha fazla bilgi için, belgelerini kontrol edin.